const leaderboardController = require('../controllers/leaderboardController');

/**
 * 获取全球排行榜
 * @param {Object} req 请求对象
 * @param {Object} res 响应对象
 * @param {Function} next 下一个中间件
 */
async function getGlobalLeaderboard(req, res, next) {
  // 全球排行榜不需要特殊处理，直接调用基础方法
  await leaderboardController.getLeaderboard(req, res, next);
}

/**
 * 获取好友排行榜
 * @param {Object} req 请求对象
 * @param {Object} res 响应对象
 * @param {Function} next 下一个中间件
 */
async function getFriendsLeaderboard(req, res, next) {
  try {
    const userId = req.user.id;
    const { level = 'easy', limit = 10, page = 1 } = req.query;
    
    // 将好友ID加入查询参数
    req.query.friendIds = await getFriendIds(userId);
    
    // 调用基础排行榜方法，但过滤为仅好友
    await leaderboardController.getLeaderboard(req, res, next);
  } catch (error) {
    next(error);
  }
}

/**
 * 获取用户在排行榜中的位置
 * @param {Object} req 请求对象
 * @param {Object} res 响应对象
 * @param {Function} next 下一个中间件
 */
async function getUserRank(req, res, next) {
  // 直接调用基础方法
  await leaderboardController.getUserRank(req, res, next);
}

/**
 * 获取按难度分类的排行榜
 * @param {Object} req 请求对象
 * @param {Object} res 响应对象
 * @param {Function} next 下一个中间件
 */
async function getLeaderboardByDifficulty(req, res, next) {
  try {
    // 从路径参数获取难度级别
    const { level } = req.params;
    
    // 验证难度级别是否有效
    if (!['easy', 'medium', 'hard'].includes(level)) {
      return res.status(400).json({
        code: 400,
        message: '无效的难度级别'
      });
    }
    
    // 设置查询参数
    req.query.level = level;
    
    // 调用基础排行榜方法
    await leaderboardController.getLeaderboard(req, res, next);
  } catch (error) {
    next(error);
  }
}

/**
 * 获取用户好友ID列表（辅助方法）
 * @param {number} userId 用户ID
 * @returns {Promise<Array>} 好友ID数组
 */
async function getFriendIds(userId) {
  // 这里应该查询用户的好友关系
  // 由于当前项目没有实现好友系统，这里返回一个空数组
  // 未来可以扩展为查询用户的好友关系表
  return [];
}

module.exports = {
  getGlobalLeaderboard,
  getFriendsLeaderboard,
  getUserRank,
  getLeaderboardByDifficulty
};
